﻿CREATE PROCEDURE [dbo].[usp_select_Fault_Count_Over_Time_By_Application_ServiceName]
(
        @Application       varchar(256)      = NULL
	   ,@StartDate         datetime         = NULL
	   ,@EndDate           datetime         = NULL
	   ,@Debug             bit              = 0
)
AS

/****************************************************************************
Name: usp_select_Fault_Count_Over_Time_By_Application.sql
*****************************************************************************/
SET NOCOUNT ON;

-- Bootstrap
DECLARE @DebugPrefix       varchar(10);
DECLARE @ErrorCode         int;
DECLARE @dateDiff int;

SET @ErrorCode          = 0;
SET @DebugPrefix        = '>>> DEBUG: ';

-- Print parameters
IF (@Debug > 0)
BEGIN
    PRINT '@Application = ' + @Application
	PRINT '@StartDate = ' + CAST (@StartDate as varchar)
	PRINT '@EndDate = ' + CAST (@EndDate as varchar)
END;



SET @dateDiff = DATEDIFF ( day  , @StartDate , @EndDate );
if  @dateDiff >31 -- get group by month
begin
		SELECT  [Application],ServiceName,  CAST(FLOOR(Cast([DateTime] as float)) as DateTime) DT, Count(*)  as Total  
		FROM dbo.[Fault]
		WHERE [DateTime] BETWEEN @StartDate AND @EndDate AND [Application]= @Application
		GROUP BY 
			[Application],ServiceName, 	
			CAST(FLOOR(Cast([DateTime] as float)) as DateTime)
		ORDER BY 	[Application], ServiceName,	
			CAST(FLOOR(Cast([DateTime] as float)) as DateTime)
end
else
begin
		SELECT  [Application],ServiceName, [DateTime]  DT, 1 as Total  
		FROM dbo.[Fault]
		WHERE [DateTime] BETWEEN @StartDate AND @EndDate AND [Application]= @Application
		ORDER BY 	[Application],ServiceName,[DateTime] asc 
end 



-- CHECK FOR ERROR
SET @ErrorCode = @@Error;
IF (@ErrorCode <> 0) GOTO ERROR_HANDLER;
			
RETURN 0;

-- Handles errors.
ERROR_HANDLER:
IF (@ErrorCode <> 0)
BEGIN
    IF (@Debug > 0) 
		BEGIN
			PRINT @DebugPrefix + 'Error Code = ' + CAST(@ErrorCode AS varchar(10)) + ' occurred.';
			RETURN @ErrorCode
		END

    -- Don't return any evidence of what specific error occurred, i.e. 
    -- we want to ward off potential hackers.
    RETURN 1;
END;

SET NOCOUNT OFF;
